﻿
using System.Net.Mail;
using System.Reflection;
using System.Text;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.LogicaNegocio.Contratos;
using Logger;


namespace ClickLand.CorporacionPlaza.LogicaNegocio.Implementacion.ComandosContrato
{
    /// <summary> Comando que envia el correo </summary>
    public class Email : IComando<bool>
    {

        #region Atributos

        /// <summary> Cantidad de dias para la culminacion del contrato </summary>
        private readonly int _cantidadDias;

        private readonly Contrato _contrato;

        #endregion

        #region Constructor

        /// <summary> Constructor de la clase </summary>
        /// <param name="cantidadDias">cantidad de dias para la culminacion del contrato</param>
        /// <param name="contrato"> </param>
        public Email(int cantidadDias, Contrato contrato)
        {
            _cantidadDias = cantidadDias;
            _contrato = contrato;
        }

        #endregion

        #region Implementacion
        
        #endregion

        /// <summary> Metodo que ejecuta la accion del comando </summary>
        /// <returns></returns>
        public bool Ejecutar()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info("Entrando al metodo " + MethodBase.GetCurrentMethod().Name + " dias de diferencias: " +
                              _cantidadDias + " cliente: " + _contrato.Cliente.Nombre);
            #endregion
            MailMessage msg = new MailMessage();
            msg.To.Add("ja_jove@hotmail.com");
            msg.To.Add("ojuanibatrupon@gmail.com");
            msg.From = new MailAddress("ojuanibatrupon@gmail.com", "Corporacion Plaza", Encoding.UTF8);
            msg.Subject = "Vencimiento de contrato";
            msg.SubjectEncoding = Encoding.UTF8;
            msg.Body = "El Contrato con nombre comercial" + _contrato.NombreComercial + " del cliente con nombre razón social " 
                + _contrato.Cliente.Nombre + " se vencerá en " + _cantidadDias + " dias. ";
            msg.BodyEncoding = Encoding.UTF8;
            msg.IsBodyHtml = false;

            SmtpClient client = new SmtpClient();
            client.Credentials = new System.Net.NetworkCredential("ojuanibatrupon@gmail.com", "13716690");
            client.Port = 587;
            client.Host = "smtp.gmail.com";
            client.EnableSsl = true;
            try
            {
                client.Send(msg);
            }
            catch (SmtpException e)
            {
                #region Instrumentacion Error
                if (Log.ErrorHabilitado)
                    Logger.Log.Info( e.Message + " " + e.InnerException);
                #endregion
            }

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return true;
        }
    }
}
